a11y: Drop notify_gtk() from GtkButtonAccessible
authorEmmanuele Bassi <ebassi@gnome.org>
Thu, 23 Apr 2020 19:08:18 +0000 (20:08 +0100)
committerEmmanuele Bassi <ebassi@gnome.org>
Fri, 5 Jun 2020 19:35:10 +0000 (20:35 +0100)
Make GtkButton notify the accessible state directly when updating the
label.

gtk/a11y/gtkbuttonaccessible.c
gtk/a11y/gtkbuttonaccessible.h
gtk/gtkbutton.c

index b8f30658e936f9a03d17fb442a20bce7e1059298..3c1385dc7898f5e4b328e75ee2b19f839a04318c 100644 (file)
@@ -171,37 +171,30 @@ gtk_button_accessible_ref_state_set (AtkObject *obj)
   return state_set;
 }
 
-static void
-gtk_button_accessible_notify_gtk (GObject    *obj,
-                                  GParamSpec *pspec)
+void
+gtk_button_accessible_update_label (GtkButtonAccessible *self)
 {
-  GtkWidget *widget = GTK_WIDGET (obj);
-  AtkObject *atk_obj = gtk_widget_get_accessible (widget);
+  g_return_if_fail (GTK_IS_BUTTON_ACCESSIBLE (self));
 
-  if (strcmp (pspec->name, "label") == 0)
-    {
-      if (atk_obj->name == NULL)
-        g_object_notify (G_OBJECT (atk_obj), "accessible-name");
+  /* If we don't have an overridden name, we use the label as the
+   * accessible name
+   */
+  if (atk_object_get_name (ATK_OBJECT (self)) == NULL)
+    g_object_notify (G_OBJECT (self), "accessible-name");
 
-      g_signal_emit_by_name (atk_obj, "visible-data-changed");
-    }
-  else
-    GTK_WIDGET_ACCESSIBLE_CLASS (gtk_button_accessible_parent_class)->notify_gtk (obj, pspec);
+  g_signal_emit_by_name (self, "visible-data-changed");
 }
 
 static void
 gtk_button_accessible_class_init (GtkButtonAccessibleClass *klass)
 {
   AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
-  GtkWidgetAccessibleClass *widget_class = (GtkWidgetAccessibleClass*)klass;
 
   class->get_name = gtk_button_accessible_get_name;
   class->get_n_children = gtk_button_accessible_get_n_children;
   class->ref_child = gtk_button_accessible_ref_child;
   class->ref_state_set = gtk_button_accessible_ref_state_set;
   class->initialize = gtk_button_accessible_initialize;
-
-  widget_class->notify_gtk = gtk_button_accessible_notify_gtk;
 }
 
 static void
index 077344007d9bf2ed3dca115ca8ca98c7b7b313c2..1c49c329b67dddbe5bddb539055d6e2f49f24c30 100644 (file)
@@ -52,6 +52,9 @@ struct _GtkButtonAccessibleClass
 GDK_AVAILABLE_IN_ALL
 GType gtk_button_accessible_get_type (void);
 
+/*< private >*/
+void    gtk_button_accessible_update_label      (GtkButtonAccessible *self);
+
 G_END_DECLS
 
 #endif /* __GTK_BUTTON_ACCESSIBLE_H__ */
index fd9cbf7abc6526c1394368ebdd2c183b9b00d637..dc96c752b18d253f1bfdef7f9d845754d6a786cb 100644 (file)
@@ -836,6 +836,15 @@ gtk_button_set_label (GtkButton   *button,
 
   gtk_label_set_label (GTK_LABEL (priv->child), label);
   gtk_button_set_child_type (button, LABEL_CHILD);
+
+  {
+    GtkButtonAccessible *accessible =
+      GTK_BUTTON_ACCESSIBLE (_gtk_widget_peek_accessible (GTK_WIDGET (button)));
+
+    if (accessible != NULL)
+      gtk_button_accessible_update_label (accessible);
+  }
+
   g_object_notify_by_pspec (G_OBJECT (button), props[PROP_LABEL]);
 }